//
//  LXJSportTrack.m
//  HMSport
//
//  Created by 李旭杰 on 2017/4/23.
//  Copyright © 2017年 LiXujie. All rights reserved.
//

#import "LXJSportTrack.h"

@implementation LXJSportTrack{
    //记录的每一段折线的起点
    CLLocation *_source;
    //折线集合
    NSMutableArray <LXJPolyline *> *_polylines;
}

@synthesize totalTime = _totalTime;
@synthesize totalDistance = _totalDistance;
@synthesize avgSpeed = _avgSpeed;
@synthesize maxSpeed = _maxSpeed;


- (instancetype)initWithSportType:(HMSportType)sportType withSportState:(HMSportState)state{
    
    self = [super init];
    if (self) {
        
        //记录运动类型
        _sportType = sportType;
        //设置运动类型图片
        //判断运动类型
        NSString *sportTypeImgName;
        switch (_sportType) {
            case HMSportTypeRunning:
                sportTypeImgName = @"map_annotation_run";
                break;
            case HMSportTypeRiding:
                sportTypeImgName = @"map_annotation_bike";
                break;
            case HMSportTypeWalking:
                sportTypeImgName = @"map_annotation_walk";
                break;
            default:
                break;
        }
        _sportTypeImgName = sportTypeImgName;
        //记录运动状态
        _sportState = state;
        _polylines = [NSMutableArray array];
    }
    return self;
}


- (LXJPolyline *)appendPolylineWithDest:(CLLocation *)dest{
    
    //判断运动状态
    if (self.sportState != HMSportStateContinue) {
        //暂停/结束运动时,停止生成折线
        //清空记录的折线起点
        _source = nil;
        return nil;
    }
    
    //判断是否移动 速度=0   当手机在室内时,speed为负值,表明室内GPS被干扰,速度无效
    if (dest.speed <= 0) {
        
        return nil;
    }
    
    //排除已经"过期"的定位数据  计算当前时间和定位时间戳的差值  2秒以内的数据可用
    if ([[NSDate date] timeIntervalSinceDate:dest.timestamp] >= 2) {
        
        return nil;
    }
    
    
    //判断首次调用
    if (_source == nil) {
        
        //记录起点
        _source = dest;
        //生成起点大头针模型
        _startAnno = [[MAPointAnnotation alloc] init];
        _startAnno.coordinate = dest.coordinate;
        
        return nil;
    }
    
    //创建折线
    LXJPolyline *polyline = [LXJPolyline polylineWithSourceLocation:_source andDestLocation:dest];
    //将折线模型进行记录
    [_polylines addObject:polyline];
    
    //记录下一段的起点
    _source = dest;
    
    return polyline;
}

- (CGFloat)totalTime{
    //求集合中元素的某个属性的和 可以使用kvc来进行运算
    _totalTime = [[_polylines valueForKeyPath:@"@sum.time"] floatValue];
    return _totalTime;
}

- (CGFloat)maxSpeed{
    //求集合中元素的某个属性的和 可以使用kvc来进行运算
    _maxSpeed = [[_polylines valueForKeyPath:@"@max.speed"] floatValue];
    return _maxSpeed;
}


- (CGFloat)avgSpeed{
    //求集合中元素的某个属性的和 可以使用kvc来进行运算
    _avgSpeed = [[_polylines valueForKeyPath:@"@avg.speed"] floatValue];
    return _avgSpeed;
}

- (CGFloat)totalDistance{
    //求集合中元素的某个属性的和 可以使用kvc来进行运算
    _totalDistance = [[_polylines valueForKeyPath:@"@sum.distance"] floatValue];
    return _totalDistance;
}


@end
